<?php
/*
 * 数据库连接类
 */
header("Content-type:text/html;charset=utf8");

class PdoModel{
    //定义静态变量为null,用来保存数据库连接状态
    private static $pdo = null;

    public function __construct($config){
        //self::$pdo是来存放数据库链接对象，第一次初始化null,之后保存数据库连接对象，不用在去连接
        if (is_null(self::$pdo)) {
            //连接数据库
            $dsn = 'mysql:host=' . $config['host'] . ';dbname=' . $config['database'];
            try {
                $pdo = new PDO($dsn, $config['username'], $config['password']);
                //设置字符集
                $pdo->query("SET NAMES ".$config['charset']);
                //设置错误类型
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                //将连接好的信息存入静态属性中
                self::$pdo = $pdo;
            } catch (PDOException $e) {
                exit('<span style="color:red">' . $e->getMessage() . '</span>');
            }
        }
    }

        /**执行有结果集方法**/
        public function q($sql){
            try{
                //执行pdo的查询有结果集的方法
                $result = self::$pdo->query($sql);
                $data   = $result->fetchAll(PDO::FETCH_ASSOC);
                //返回结果
                return $data;
            }catch(Exception $e){
                //错误提示
                $this->errorMsg($sql,$e->getMessage());
            }
        }

        /**执行没有结果集的方法**/
        public function e($sql){
            try{
                $num = self::$pdo->exec($sql);
                return $num;
            }catch(PDOException $e){
                //错误提示
                $this->errorMsg($sql,$e->getMessage());
            }
        }

        private function errorMsg($sql,$error){
            echo 'SQL:<span style="color:red">' .$sql. '</span><br/>';
            echo '错误信息：<span style="color:red">' .$error. '</span>';
            exit;
        }
}

function M($config){
    $pdo = new PdoModel($config);
    return $pdo;
}